ambari-server api,多表数据关联
前文(Ambari-server开发自定义api)提到ambari-server自定义api,来获取一个表的信息。
现在有一个需求,就是制作一个api,获取两个表的信息。这两个表中的数据是通过一个字段值是否一致来判断是否关联在一起的。
下文会根据每个方法的作用进行说明,没有ambari-server后台开发的经验看起来可能会有些吃力,建议还是多debug后台代码,该文仅作参考。
下面以ambari数据表
racks
和hosts
表为例,制作的一条get类型的api,其中根据racks表中的rack_name字段值和hosts表中的rack_info字段值判断数据是否关联。
一、得到多表数据
1. QueryImpl.queryForSubResources()
其中requestedSubResources的值是在对应Type的ResourceDefinition类中定义,例如RackResourceDefinition.java
对应的RackHostResourceDefinition.java
这样的话,requestedSubResources就有值了
2. populatedQueryResults代表你前面查询获取到的数据
3. QueryImpl.getKeyValueMap()
4. QueryImpl.createPredicate()
5. QueryImpl.doQuery()
获取的另一个表中的数据
6. 返回到QueryImpl.execute(),执行getResult()
这里面最重要的就是两个for循环,由两个for循环来判断子资源是否内嵌到父资源内
7. QueryResult queryResult = queryResults.get(parentResource);
- queryResult的queryResponse代表Rack相关数据
- 这个方法里面也有相关分页,排序的操作(分页和排序功能没有深入研究)
8. 使用for循环来遍历Rack相关的数据 – iterResource
9. 第二个for循环对requestedSubResources进行遍历
10. 重中之重
1 | ... |
二、最终效果
请求方式:http://ip:8080/api/v1/racks?fields=rack_hosts
请求类型:GET
1 | { |
其中rack字段是一个表的数据,rack_hosts字段又是另一个表的数据。
三、如何联系我
如需获取清洗流程图以及后续详细干货内容,可添加好友:create17_ 详聊。
Ambari 二次开发知识库地址:https://www.yuque.com/create17/ambari
点关注,不迷路
好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是人才。
白嫖不好,创作不易。各位的支持和认可,就是我创作的最大动力,我们下篇文章见!
如果本篇博客有任何错误,请批评指教,不胜感激 !
原文作者: create17
原文链接: https://841809077.github.io/2018/11/25/Ambari/ambari server 二次开发/ambari-server api 多表数据关联.html
版权声明: 转载请注明出处(码字不易,请保留作者署名及链接,谢谢配合!)